package com.kuqi.dao;

import com.kuqi.entity.TestModel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import javax.transaction.Transactional;
import java.util.List;


// 调用数据库查询数据（其中一些方法已经隐藏实现，不用手动实现）
// <表名， 主键类型>
public interface TestRepository extends JpaRepository<TestModel, Integer> {

    // jpql是针对实体类和属性的查询语句, 这里使用的是条件查询
    @Query(value = "FROM TestModel WHERE height > ?1 AND weight < ?2")
    List<TestModel> findByHeightAndWeight(int height, int weight);

    // 使用标准的sql语句进行查询(其中表名参数都是针对表的)
    @Query(value = "select * from test where  name =  ?1",nativeQuery = true)
    List<TestModel> findByName(String name);


    // 使用sql原生语句的删除(其中表名参数都是针对表的)
    @Modifying
    @Transactional
    @Query(value = "delete from test where name = :name", nativeQuery = true)
    int deleteByName(@Param("name") String name);


    // 使用sql原生语句的新增(其中表名参数都是针对表的)
    @Modifying
    @Transactional
    @Query(value = "update test set height = :height where name = :name", nativeQuery = true)
    int updateByName(@Param("height") int height, @Param("name") String name);


    // 使用原生sql语句实现插入（针对表）
    @Modifying
    @Transactional
    @Query(value = "INSERT into test value(:id,:name,:sex, 0, 0)", nativeQuery = true)
    int insertValue(@Param("id")int id, @Param("name") String name, @Param("sex") String sex);

}